/**
 * \file genMap.cpp
 * \brief Generation de carte
 * \author ARTUR Vincent
 * \author LAPERDRIX Pierre
 * \version 1.0
 */

#include "genMap.h"

using namespace std;



GenMap::GenMap(){
#ifndef INITRAND
	srand(time(NULL));
#define INITRAND
#endif
}

GenMap::~GenMap(){}

int** GenMap::genererCarte(int n){
	int** matrice = new int*[n];
	for(int i=0;i<n;i++){
		matrice[i] = new int[n];
		for(int j=0;j<n;j++){
			matrice[i][j] = -1;
		}
	}


	//Taille du bloc courant
	int taille = 1;
	//Taille variable du bloc (longueur/hauteur entre 2 et 2+tailleBloc)
	int tailleBloc = n/10;

	for(int j=0; j<n ; j++){
		for(int k=0 ; k<n ; k++){
			if(matrice[j][k] == -1){
				taille = rand()%tailleBloc - 2;
				if(taille<2) taille =2;
				int type = rand()%3;
				for(int l=0;l<taille;l++){
					for(int m=0; m<taille; m++){
						if(j+l<n && k+m<n && matrice[j+l][k+m]==-1){
							matrice[j+l][k+m] = type;
						}
					}
				}


			}
		
		}

	}
	int decor = n/2;
	while(decor>0){
		int x= rand()%n;
		int y= rand()%n;
		int ressource = rand()%2;
		switch(matrice[x][y]){
		case PLAINE:
			if(ressource==0) matrice[x][y]=PLAINEFER;
			else matrice[x][y]=PLAINEFRUIT;
			break;
		case MONTAGNE:
			if(ressource==0) matrice[x][y]=MONTAGNEFER;
			else matrice[x][y]=MONTAGNEFRUIT;
			break;
		default :
			if(ressource==0) matrice[x][y]=DESERTFER;
			else matrice[x][y]=DESERTFRUIT;
			break;

		}
		decor--;


	}
	return matrice;

}

GenMap* GenMap_new() { return new GenMap(); }
void GenMap_delete(GenMap* genmap) { delete genmap; }
int** GenMap_genererCarte(GenMap* genmap,int n) { return genmap->genererCarte(n);}
